package com.gowhere.service.impl.system;

import com.github.pagehelper.PageHelper;
import com.gowhere.domain.Role;
import com.gowhere.domain.UserInfo;
import com.gowhere.mapper.system.UserInfoMapper;
import com.gowhere.service.system.UserInfoService;
import com.gowhere.utils.MD5Util;
import com.gowhere.utils.MapperUtil;
import com.gowhere.utils.UidUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class UserInfoServiceImpl implements UserInfoService {
    @Override
    public List<UserInfo> findByPage(int pageNum, int pageSize) {

            SqlSession session = MapperUtil.getSession();
            UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
            PageHelper.startPage(pageNum,pageSize);
            List<UserInfo> list = mapper.findAll();
            MapperUtil.close(session);
            return list;
        }

    @Override
    public void save(UserInfo userInfo) {

        SqlSession session = MapperUtil.getSession();
        String uid = UidUtil.getUid();
        userInfo.setId(uid);
        String pwd = MD5Util.md5(userInfo.getPassword());
        userInfo.setPassword(pwd);
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        mapper.save(userInfo);
        MapperUtil.close(session);
    }

    @Override
    public UserInfo findById(String id) {
        SqlSession session = MapperUtil.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        UserInfo userInfo = mapper.findById(id);
        MapperUtil.close(session);
        return userInfo;
    }

    @Override
    public boolean delete(String ids) {
        boolean flag = false;
        SqlSession session = MapperUtil.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        String[] split = ids.split(",");
        for (String id : split) {
            mapper.delete(id);
        }
        MapperUtil.close(session);
      return flag;
    }


    public List<Role> findRoleUserUid(String roleId) {
        SqlSession session = MapperUtil.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        List<Role>list = mapper.findRoleUserUid(roleId);
        MapperUtil.close(session);
        return list;
    }

    @Override
    public void addRoleToUser(String userId, String[] roleIds) {
        SqlSession session = MapperUtil.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
        //删掉现有
        System.out.println(userId);
        mapper.deleteRole(userId);
        // 建立全新
        if (roleIds!=null&&roleIds.length>0) {
            for (String roleId : roleIds) {
                mapper.addRoleToUser(userId, roleId);
            }
        }
        MapperUtil.close(session);
    }

    @Override
    public void turnStatus(String uid, String status) {
        //获取session对象
        SqlSession session = MapperUtil.getSession();
        //获取持久层对象，调用findById方法
        UserInfoMapper userInfoMapper = session.getMapper(UserInfoMapper.class);
        userInfoMapper.updateStatus(uid,status);
        MapperUtil.close(session);

    }

    public List<UserInfo> findUserRole(String id) {
        SqlSession session = MapperUtil.getSession();
        UserInfoMapper mapper = session.getMapper(UserInfoMapper.class);
//        List<UserInfo> userInfos = mapper.findUserRole(id);
        List<UserInfo> userInfos = mapper.findUserRole(id);


        MapperUtil.close(session);
        return userInfos;
    }



    @Override
    public UserInfo login(UserInfo userInfo) {
        String pwd = MD5Util.md5(userInfo.getPassword());
        SqlSession sqlSession = MapperUtil.getSession();
        UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class);
        UserInfo user = mapper.findByUsernameAndPwd(userInfo.getUsername(),pwd);
        MapperUtil.close(sqlSession);
//        if (user!=null) {
//            if (user.getStatus() == 0) {
//                return null;
//            } else {
//                return user;
//            }
//        }
        return user;
    }

    /**
     * 根据用户名查询用户信息
     *
     * @param username
     * @return
     */
    @Override
    public UserInfo findByName(String username) {
        SqlSession sqlSession = MapperUtil.getSession();
        UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class);
        UserInfo userInfo = mapper.findByUsername(username);
        return userInfo;
    }

    @Override
    public void password(UserInfo user) {
        SqlSession sqlSession = MapperUtil.getSession();
        UserInfoMapper mapper = sqlSession.getMapper(UserInfoMapper.class);
        mapper.updatePassword(user);
        MapperUtil.close(sqlSession);
    }

}


